const path = require('path');
// 在vue-config.js 中加入
// 开启gzip压缩
const CompressionWebpackPlugin = require('compression-webpack-plugin');
// webpack拷贝插件
const CopyWebpackPlugin = require('copy-webpack-plugin');
// 判断开发环境
const isProduction = process.env.NODE_ENV === 'production';
const isH5 = process.env.UNI_PLATFORM === 'h5';
const isTestBuild = process.env.VUE_APP_ENV === "test";

const BASE_URL = process.env.NODE_ENV === 'production' ? '/' : '/';
const resolve = dir => {
    return path.join(__dirname, dir)
}

module.exports = {
    configureWebpack: config => {
        if (isProduction && isH5) {
            // 开启分离js
            config.plugins.push(new CompressionWebpackPlugin({
                algorithm: 'gzip',
                test: /\.js$|\.html$|\.json$|\.css/,
                threshold: 10240,
                minRatio: 0.8
            }));
        }
        // 开启分离js
        // config.optimization = {
        //     runtimeChunk: {
        //         name: 'common/runtime'
        //     },
        //     splitChunks: {
        //         chunks: 'all',
        //         maxInitialRequests: Infinity,
        //         minSize: 20000,
        //         cacheGroups: {
        //             vendor: {
        //                 name: "common/vendor",
        //                 test: /node_modules/, //打包第三方库
        //                 chunks: "all",
        //                 priority: 10 // 优先级
        //             }
        //         }
        //     }
        // };
        // config.plugins.push(new CopyWebpackPlugin([{
        //     from: path.join(__dirname, 'src/pages/home/index'),
        //     to: path.join(__dirname, 'dist', isProduction ? 'build' : 'dev', process.env.UNI_PLATFORM, 'pages/tabBar/home/index'),
        //     ignore: ["*.vue", "*.js", "*.wxs", "*.css"]
        // }]));
        // 取消webpack警告的性能提示
        config.performance = {
            hints: 'warning',
            //入口起点的最大体积
            maxEntrypointSize: 50000000,
            //生成文件的最大体积
            maxAssetSize: 30000000,
            //只给出 js 文件的性能提示
            assetFilter: function (assetFilename) {
                return assetFilename.endsWith('.js');
            }
        }
    },
    // 如果你不需要使用eslint，把lintOnSave设为false即可
    lintOnSave: true,
    // css: {
    //     // 是否使用css分离插件 ExtractTextPlugin
    //     extract: true,
    //     // 开启 CSS source maps
    //     sourceMap: false,
    //     // 启用 CSS modules for all css / pre-processor files.
    //     modules: false
    // },
    chainWebpack: config => {
        config.resolve.alias
            .set('@', resolve('src'))
            .set('@c', resolve('src/components'))
            .set('@u', resolve('src/common'))
            .set('@s', resolve('src/static'))
            .set('@js', resolve('src/js_sdk'));
        // 发行或运行时启用了压缩时会生效
        if (isProduction && !isTestBuild) {
            config.optimization.minimizer('terser').tap((args) => {
                const compress = args[0].terserOptions.compress
                // 非 App 平台移除 console 代码(包含所有 console 方法，如 log,debug,info...)
                compress.drop_console = true
                compress.pure_funcs = [
                    '__f__', // App 平台 vue 移除日志代码
                    'console.debug', // 可移除指定的 console 方法
                    'console.log'
                ]
                return args
            })
        }
    },
    // 打包时不生成.map文件
    productionSourceMap: false
};
